
from rest_framework import serializers
from users.models import User
from django.contrib.auth.models import Group




class GroupSimpleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Group
        fields = [
            'id',
            'name'
        ]



class AdminModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = [
            'id',
            'username',
            'email',
            'mobile',

            # 新建password要加密，并且要新建is_staff=True，而默认创建不具备
            'password',

            # 类型ManyToManyField类型，传递列表记录多对多另外一张表多主键，用来自动构建中间表数据
            'groups',
            'user_permissions'
        ]

        extra_kwargs = {
            'password': {'write_only': True}
        }


    def create(self, validated_data):
        # 把中间表数据从有效数据中剔除，原因create_superuser无法使用ManyToMany字段构建中间表数据
        # 细节：前端传递的groups和user_permissions是一个列表存的主键，在经过有效校验之后，会转化成模型类对象
        # 前端groups=[2, 3] --类型校验--->有效数据的groups=[<id为2的分组对象>, <id为3的分组对象>]
        groups = validated_data.pop('groups')
        user_permissions = validated_data.pop('user_permissions')

        user = User.objects.create_superuser(**validated_data)

        # 补充，使用groups和user_persmissions字段，去构建中间表数据
        user.groups = groups
        user.user_permissions = user_permissions
        user.save()


        return user









